package thread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 晓星航
 * Date: 2023-07-23
 * Time: 13:51
 */
//懒汉模式
class SingletonLazy {
    //在此处，先把这个实例设为空
    private volatile static SingletonLazy instance = null;
    //如果需要使用这个唯一实例，统一通过 Singleton.getInstance() 方式来获取
        //饿汉模式加两次锁 提高效率
    public static SingletonLazy getInstance() {
        if (instance == null) {
            synchronized(SingletonLazy.class) {
                if (instance == null) {
                    instance = new SingletonLazy();
                }
            }
        }
        return instance;
    }
    private SingletonLazy(){

    }
//        //饿汉模式加一次锁
//        synchronized(SingletonLazy.class){
//            if (instance == null) {
//                instance = new SingletonLazy();
//            }
//        }
//        return instance;
        //饿汉模式不加锁(可能会出现线程安全问题)
//        if (instance == null) {
//            instance = new SingletonLazy();
//        }
//        return instance;
    //为了避免 Singleton 类不小心被复制出多份来。
    //把构造方法设为private 在类外面，就无法通过new的方式来创建这个 Singleton 实例了
}
public class ThreadDemo20 {
    public static void main(String[] args) {
        SingletonLazy s1 = SingletonLazy.getInstance();
        SingletonLazy s2 = SingletonLazy.getInstance();
        System.out.println(s1 == s2);
    }
}
